Skip to content

Conversation

kernel-patches-daemon-bpf[bot]
Copy link

Pull request for series with
subject: LoongArch: BPF: Fix incorrect return pointer value in the eBPF program
version: 2
url: https://patchwork.kernel.org/project/netdevbpf/list/?series=991838

@kernel-patches-daemon-bpf
Copy link
Author

Upstream branch: 0786654
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=991838
version: 2

@kernel-patches-daemon-bpf
Copy link
Author

Upstream branch: dc0fe95
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=991838
version: 2

@kernel-patches-daemon-bpf
Copy link
Author

Upstream branch: c80d797
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=991838
version: 2

@kernel-patches-daemon-bpf
Copy link
Author

Upstream branch: 3ec8560
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=991838
version: 2

@kernel-patches-daemon-bpf
Copy link
Author

Upstream branch: 1274163
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=991838
version: 2

@kernel-patches-daemon-bpf
Copy link
Author

Upstream branch: d87fdb1
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=991838
version: 2

@kernel-patches-daemon-bpf
Copy link
Author

Upstream branch: dbe99ea
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=991838
version: 2

@kernel-patches-daemon-bpf
Copy link
Author

Upstream branch: 6850a33
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=991838
version: 2

@kernel-patches-daemon-bpf
Copy link
Author

Upstream branch: dbe99ea
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=991838
version: 2

@kernel-patches-daemon-bpf
Copy link
Author

Upstream branch: 5c42715
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=991838
version: 2

@kernel-patches-daemon-bpf
Copy link
Author

Upstream branch: bf7a6a6
series: https://patchwork.kernel.org/project/netdevbpf/list/?series=991838
version: 2

In some eBPF programs, the return value is a pointer.
When the kernel call an eBPF program (such as struct_ops),
it expects a 64-bit address to be returned, but instead a 32-bit value.

Before applying this patch:
./test_progs -a ns_bpf_qdisc
CPU 7 Unable to handle kernel paging request at virtual
address 0000000010440158.

As shown in the following test case,
bpf_fifo_dequeue return value is a pointer.
progs/bpf_qdisc_fifo.c

SEC("struct_ops/bpf_fifo_dequeue")
struct sk_buff *BPF_PROG(bpf_fifo_dequeue, struct Qdisc *sch)
{
	struct sk_buff *skb = NULL;
	........
	skb = bpf_kptr_xchg(&skbn->skb, skb);
	........
	return skb;
}

kernel call bpf_fifo_dequeue:
net/sched/sch_generic.c

static struct sk_buff *dequeue_skb(struct Qdisc *q, bool *validate,
				   int *packets)
{
	struct sk_buff *skb = NULL;
	........
	skb = q->dequeue(q);
	.........
}
When accessing the skb, an address exception error will occur.
because the value returned by q->dequeue at this point is a 32-bit
address rather than a 64-bit address.

After applying the patch:
./test_progs -a ns_bpf_qdisc
Warning: sch_htb: quantum of class 10001 is small. Consider r2q change.
213/1   ns_bpf_qdisc/fifo:OK
213/2   ns_bpf_qdisc/fq:OK
213/3   ns_bpf_qdisc/attach to mq:OK
213/4   ns_bpf_qdisc/attach to non root:OK
213/5   ns_bpf_qdisc/incompl_ops:OK
213     ns_bpf_qdisc:OK
Summary: 1/5 PASSED, 0 SKIPPED, 0 FAILED

Fixes: 73c359d ("LoongArch: BPF: Sign-extend return values")
Signed-off-by: Jinyang He <[email protected]>
Signed-off-by: Haoran Jiang <[email protected]>

----------
v2:
1,add emit_slt* helpers
2,Use slt/slld/srad instructions to avoid branch
@kernel-patches-daemon-bpf
Copy link
Author

At least one diff in series https://patchwork.kernel.org/project/netdevbpf/list/?series=991838 irrelevant now. Closing PR.

@kernel-patches-daemon-bpf kernel-patches-daemon-bpf bot deleted the series/991838=>bpf-next branch August 19, 2025 09:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

0 participants